// 知识点1：区分拷贝和移动的重载函数通常有一个版本接收const T
// &(左值引用)，一个版本接受T&&(右值引用参数)——引用限定符，这样我们调用函数时，实参的类型决定了新元素是进行拷贝还是移动操作

// 知识点2：在函数的参数列表之后加上&或者&&表示该函数只能用于左值或者右值

// 知识点3：当我们定义两个或两个以上的具有同名且参数列表相同的成员函数，必须对所有函数都加上引用限定符或者都不加

// void push_back(string &&s) { data->push_back(move(s)); }